home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / asmsrc / icsources.lha / INSERT / NOISETRACKER INSERT < prev    next >
Encoding:
Text File  |  1980-12-27  |  7.4 KB  |  472 lines

  1.  
  2. mt_init:lea    mt_data,a0
  3.     move.l    a0,a1
  4.     add.l    #$3b8,a1
  5.     moveq    #$7f,d0
  6.     moveq    #0,d1
  7. mt_loop:move.l    d1,d2
  8.     subq.w    #1,d0
  9. mt_lop2:move.b    (a1)+,d1
  10.     cmp.b    d2,d1
  11.     bgt.s    mt_loop
  12.     dbf    d0,mt_lop2
  13.     addq.b    #1,d2
  14.  
  15.     lea    mt_samplestarts(pc),a1
  16.     asl.l    #8,d2
  17.     asl.l    #2,d2
  18.     add.l    #$43c,d2
  19.     add.l    a0,d2
  20.     move.l    d2,a2
  21.     moveq    #$1e,d0
  22. mt_lop3:clr.l    (a2)
  23.     move.l    a2,(a1)+
  24.     moveq    #0,d1
  25.     move.w    42(a0),d1
  26.     asl.l    #1,d1
  27.     add.l    d1,a2
  28.     add.l    #$1e,a0
  29.     dbf    d0,mt_lop3
  30.  
  31.     or.b    #$2,$bfe001
  32.     move.b    #$6,mt_speed
  33.     clr.w    $dff0a8
  34.     clr.w    $dff0b8
  35.     clr.w    $dff0c8
  36.     clr.w    $dff0d8
  37.     clr.b    mt_songpos
  38.     clr.b    mt_counter
  39.     clr.w    mt_pattpos
  40.     rts
  41.  
  42. mt_end:    clr.w    $dff0a8
  43.     clr.w    $dff0b8
  44.     clr.w    $dff0c8
  45.     clr.w    $dff0d8
  46.     move.w    #$f,$dff096
  47.     rts
  48.  
  49. mt_music:
  50.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  51.     lea    mt_data,a0
  52.     addq.b    #$1,mt_counter
  53.     move.b    mt_counter,D0
  54.     cmp.b    mt_speed,D0
  55.     blt.s    mt_nonew
  56.     clr.b    mt_counter
  57.     bra    mt_getnew
  58.  
  59. mt_nonew:
  60.     lea    mt_voice1(pc),a6
  61.     lea    $dff0a0,a5
  62.     bsr    mt_checkcom
  63.     lea    mt_voice2(pc),a6
  64.     lea    $dff0b0,a5
  65.     bsr    mt_checkcom
  66.     lea    mt_voice3(pc),a6
  67.     lea    $dff0c0,a5
  68.     bsr    mt_checkcom
  69.     lea    mt_voice4(pc),a6
  70.     lea    $dff0d0,a5
  71.     bsr    mt_checkcom
  72.     bra    mt_endr
  73.  
  74. mt_arpeggio:
  75.     moveq    #0,d0
  76.     move.b    mt_counter,d0
  77.     divs    #$3,d0
  78.     swap    d0
  79.     cmp.w    #$0,d0
  80.     beq.s    mt_arp2
  81.     cmp.w    #$2,d0
  82.     beq.s    mt_arp1
  83.  
  84.     moveq    #0,d0
  85.     move.b    $3(a6),d0
  86.     lsr.b    #4,d0
  87.     bra.s    mt_arp3
  88. mt_arp1:moveq    #0,d0
  89.     move.b    $3(a6),d0
  90.     and.b    #$f,d0
  91.     bra.s    mt_arp3
  92. mt_arp2:move.w    $10(a6),d2
  93.     bra.s    mt_arp4
  94. mt_arp3:asl.w    #1,d0
  95.     moveq    #0,d1
  96.     move.w    $10(a6),d1
  97.     lea    mt_periods(pc),a0
  98.     moveq    #$24,d7
  99. mt_arploop:
  100.     move.w    (a0,d0.w),d2
  101.     cmp.w    (a0),d1
  102.     bge.s    mt_arp4
  103.     addq.l    #2,a0
  104.     dbf    d7,mt_arploop
  105.     rts
  106. mt_arp4:move.w    d2,$6(a5)
  107.     rts
  108.  
  109. mt_getnew:
  110.     lea    mt_data,a0
  111.     move.l    a0,a3
  112.     move.l    a0,a2
  113.     add.l    #$c,a3
  114.     add.l    #$3b8,a2
  115.     add.l    #$43c,a0
  116.  
  117.     moveq    #0,d0
  118.     move.l    d0,d1
  119.     move.b    mt_songpos,d0
  120.     move.b    (a2,d0.w),d1
  121.     asl.l    #8,d1
  122.     asl.l    #2,d1
  123.     add.w    mt_pattpos,d1
  124.     clr.w    mt_dmacon
  125.  
  126.     lea    $dff0a0,a5
  127.     lea    mt_voice1(pc),a6
  128.     bsr.s    mt_playvoice
  129.     lea    $dff0b0,a5
  130.     lea    mt_voice2(pc),a6
  131.     bsr.s    mt_playvoice
  132.     lea    $dff0c0,a5
  133.     lea    mt_voice3(pc),a6
  134.     bsr.s    mt_playvoice
  135.     lea    $dff0d0,a5
  136.     lea    mt_voice4(pc),a6
  137.     bsr.s    mt_playvoice
  138.     bra    mt_setdma
  139.  
  140. mt_playvoice:
  141.     move.l    (a0,d1.l),(a6)
  142.     addq.l    #4,d1
  143.     moveq    #0,d2
  144.     move.b    $2(a6),d2
  145.     and.b    #$f0,d2
  146.     lsr.b    #4,d2
  147.     move.b    (a6),d0
  148.     and.b    #$f0,d0
  149.     or.b    d0,d2
  150.     tst.b    d2
  151.     beq.s    mt_setregs
  152.     moveq    #0,d3
  153.     lea    mt_samplestarts(pc),a1
  154.     move.l    d2,d4
  155.     subq.l    #$1,d2
  156.     asl.l    #2,d2
  157.     mulu    #$1e,d4
  158.     move.l    (a1,d2.l),$4(a6)
  159.     move.w    (a3,d4.l),$8(a6)
  160.     move.w    $2(a3,d4.l),$12(a6)
  161.     move.w    $4(a3,d4.l),d3
  162.     tst.w    d3
  163.     beq.s    mt_noloop
  164.     move.l    $4(a6),d2
  165.     asl.w    #1,d3
  166.     add.l    d3,d2
  167.     move.l    d2,$a(a6)
  168.     move.w    $4(a3,d4.l),d0
  169.     add.w    $6(a3,d4.l),d0
  170.     move.w    d0,8(a6)
  171.     move.w    $6(a3,d4.l),$e(a6)
  172.     move.w    $12(a6),$8(a5)
  173.     bra.s    mt_setregs
  174. mt_noloop:
  175.     move.l    $4(a6),d2
  176.     add.l    d3,d2
  177.     move.l    d2,$a(a6)
  178.     move.w    $6(a3,d4.l),$e(a6)
  179.     move.w    $12(a6),$8(a5)
  180. mt_setregs:
  181.     move.w    (a6),d0
  182.     and.w    #$fff,d0
  183.     beq    mt_checkcom2
  184.     move.b    $2(a6),d0
  185.     and.b    #$F,d0
  186.     cmp.b    #$3,d0
  187.     bne.s    mt_setperiod
  188.     bsr    mt_setmyport
  189.     bra    mt_checkcom2
  190. mt_setperiod:
  191.     move.w    (a6),$10(a6)
  192.     and.w    #$fff,$10(a6)
  193.     move.w    $14(a6),d0
  194.     move.w    d0,$dff096
  195.     clr.b    $1b(a6)
  196.  
  197.     move.l    $4(a6),(a5)
  198.     move.w    $8(a6),$4(a5)
  199.     move.w    $10(a6),d0
  200.     and.w    #$fff,d0
  201.     move.w    d0,$6(a5)
  202.     move.w    $14(a6),d0
  203.     or.w    d0,mt_dmacon
  204.     bra    mt_checkcom2
  205.  
  206. mt_setdma:
  207.     move.w    #$12c,d0
  208. mt_wait:dbf    d0,mt_wait
  209.     move.w    mt_dmacon,d0
  210.     or.w    #$8000,d0
  211.     move.w    d0,$dff096
  212.     move.w    #$12c,d0
  213. mt_wai2:dbf    d0,mt_wai2
  214.     lea    $dff000,a5
  215.     lea    mt_voice4(pc),a6
  216.     move.l    $a(a6),$d0(a5)
  217.     move.w    $e(a6),$d4(a5)
  218.     lea    mt_voice3(pc),a6
  219.     move.l    $a(a6),$c0(a5)
  220.     move.w    $e(a6),$c4(a5)
  221.     lea    mt_voice2(pc),a6
  222.     move.l    $a(a6),$b0(a5)
  223.     move.w    $e(a6),$b4(a5)
  224.     lea    mt_voice1(pc),a6
  225.     move.l    $a(a6),$a0(a5)
  226.     move.w    $e(a6),$a4(a5)
  227.  
  228.     add.w    #$10,mt_pattpos
  229.     cmp.w    #$400,mt_pattpos
  230.     bne.s    mt_endr
  231. mt_nex:    clr.w    mt_pattpos
  232.     clr.b    mt_break
  233.     addq.b    #1,mt_songpos
  234.     and.b    #$7f,mt_songpos
  235.     move.b    mt_songpos,d1
  236.     cmp.b    mt_data+$3b6,d1
  237.     bne.s    mt_endr
  238.     clr.b    mt_songpos
  239. mt_endr:tst.b    mt_break
  240.     bne.s    mt_nex
  241.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  242.     rts
  243.  
  244. mt_setmyport:
  245.     move.w    (a6),d2
  246.     and.w    #$fff,d2
  247.     move.w    d2,$18(a6)
  248.     move.w    $10(a6),d0
  249.     clr.b    $16(a6)
  250.     cmp.w    d0,d2
  251.     beq.s    mt_clrport
  252.     bge.s    mt_rt
  253.     move.b    #$1,$16(a6)
  254.     rts
  255. mt_clrport:
  256.     clr.w    $18(a6)
  257. mt_rt:    rts
  258.  
  259. mt_myport:
  260.     move.b    $3(a6),d0
  261.     beq.s    mt_myslide
  262.     move.b    d0,$17(a6)
  263.     clr.b    $3(a6)
  264. mt_myslide:
  265.     tst.w    $18(a6)
  266.     beq.s    mt_rt
  267.     moveq    #0,d0
  268.     move.b    $17(a6),d0
  269.     tst.b    $16(a6)
  270.     bne.s    mt_mysub
  271.     add.w    d0,$10(a6)
  272.     move.w    $18(a6),d0
  273.     cmp.w    $10(a6),d0
  274.     bgt.s    mt_myok
  275.     move.w    $18(a6),$10(a6)
  276.     clr.w    $18(a6)
  277. mt_myok:move.w    $10(a6),$6(a5)
  278.     rts
  279. mt_mysub:
  280.     sub.w    d0,$10(a6)
  281.     move.w    $18(a6),d0
  282.     cmp.w    $10(a6),d0
  283.     blt.s    mt_myok
  284.     move.w    $18(a6),$10(a6)
  285.     clr.w    $18(a6)
  286.     move.w    $10(a6),$6(a5)
  287.     rts
  288.  
  289. mt_vib:    move.b    $3(a6),d0
  290.     beq.s    mt_vi
  291.     move.b    d0,$1a(a6)
  292.  
  293. mt_vi:    move.b    $1b(a6),d0
  294.     lea    mt_sin(pc),a4
  295.     lsr.w    #$2,d0
  296.     and.w    #$1f,d0
  297.     moveq    #0,d2
  298.     move.b    (a4,d0.w),d2
  299.     move.b    $1a(a6),d0
  300.     and.w    #$f,d0
  301.     mulu    d0,d2
  302.     lsr.w    #$6,d2
  303.     move.w    $10(a6),d0
  304.     tst.b    $1b(a6)
  305.     bmi.s    mt_vibmin
  306.     add.w    d2,d0
  307.     bra.s    mt_vib2
  308. mt_vibmin:
  309.     sub.w    d2,d0
  310. mt_vib2:move.w    d0,$6(a5)
  311.     move.b    $1a(a6),d0
  312.     lsr.w    #$2,d0
  313.     and.w    #$3c,d0
  314.     add.b    d0,$1b(a6)
  315.     rts
  316.  
  317. mt_nop:    move.w    $10(a6),$6(a5)
  318.     rts
  319.  
  320. mt_checkcom:
  321.     move.w    $2(a6),d0
  322.     and.w    #$fff,d0
  323.     beq.s    mt_nop
  324.     move.b    $2(a6),d0
  325.     and.b    #$f,d0
  326.     tst.b    d0
  327.     beq    mt_arpeggio
  328.     cmp.b    #$1,d0
  329.     beq.s    mt_portup
  330.     cmp.b    #$2,d0
  331.     beq    mt_portdown
  332.     cmp.b    #$3,d0
  333.     beq    mt_myport
  334.     cmp.b    #$4,d0
  335.     beq    mt_vib
  336.     move.w    $10(a6),$6(a5)
  337.     cmp.b    #$a,d0
  338.     beq.s    mt_volslide
  339.     rts
  340.  
  341. mt_volslide:
  342.     moveq    #0,d0
  343.     move.b    $3(a6),d0
  344.     lsr.b    #4,d0
  345.     tst.b    d0
  346.     beq.s    mt_voldown
  347.     add.w    d0,$12(a6)
  348.     cmp.w    #$40,$12(a6)
  349.     bmi.s    mt_vol2
  350.     move.w    #$40,$12(a6)
  351. mt_vol2:move.w    $12(a6),$8(a5)
  352.     rts
  353.  
  354. mt_voldown:
  355.     moveq    #0,d0
  356.     move.b    $3(a6),d0
  357.     and.b    #$f,d0
  358.     sub.w    d0,$12(a6)
  359.     bpl.s    mt_vol3
  360.     clr.w    $12(a6)
  361. mt_vol3:move.w    $12(a6),$8(a5)
  362.     rts
  363.  
  364. mt_portup:
  365.     moveq    #0,d0
  366.     move.b    $3(a6),d0
  367.     sub.w    d0,$10(a6)
  368.     move.w    $10(a6),d0
  369.     and.w    #$fff,d0
  370.     cmp.w    #$71,d0
  371.     bpl.s    mt_por2
  372.     and.w    #$f000,$10(a6)
  373.     or.w    #$71,$10(a6)
  374. mt_por2:move.w    $10(a6),d0
  375.     and.w    #$fff,d0
  376.     move.w    d0,$6(a5)
  377.     rts
  378.  
  379. mt_portdown:
  380.     clr.w    d0
  381.     move.b    $3(a6),d0
  382.     add.w    d0,$10(a6)
  383.     move.w    $10(a6),d0
  384.     and.w    #$fff,d0
  385.     cmp.w    #$358,d0
  386.     bmi.s    mt_por3
  387.     and.w    #$f000,$10(a6)
  388.     or.w    #$358,$10(a6)
  389. mt_por3:move.w    $10(a6),d0
  390.     and.w    #$fff,d0
  391.     move.w    d0,$6(a5)
  392.     rts
  393.  
  394. mt_checkcom2:
  395.     move.b    $2(a6),d0
  396.     and.b    #$f,d0
  397.     cmp.b    #$e,d0
  398.     beq.s    mt_setfilt
  399.     cmp.b    #$d,d0
  400.     beq.s    mt_pattbreak
  401.     cmp.b    #$b,d0
  402.     beq.s    mt_posjmp
  403.     cmp.b    #$c,d0
  404.     beq.s    mt_setvol
  405.     cmp.b    #$f,d0
  406.     beq.s    mt_setspeed
  407.     rts
  408.  
  409. mt_setfilt:
  410.     rts
  411. mt_pattbreak:
  412.     not.b    mt_break
  413.     rts
  414. mt_posjmp:
  415.     move.b    $3(a6),d0
  416.     subq.b    #$1,d0
  417.     move.b    d0,mt_songpos
  418.     not.b    mt_break
  419.     rts
  420. mt_setvol:
  421.     cmp.b    #$40,$3(a6)
  422.     ble.s    mt_vol4
  423.     move.b    #$40,$3(a6)
  424. mt_vol4:move.b    $3(a6),$8(a5)
  425.     rts
  426. mt_setspeed:
  427.     move.b    $3(a6),d0
  428.     and.w    #$1f,d0
  429.     beq.s    mt_rts2
  430.     clr.b    mt_counter
  431.     move.b    d0,mt_speed
  432. mt_rts2:rts
  433.  
  434.  
  435.  
  436.  
  437. mt_sin:
  438.  dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  439.  dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  440.  
  441. mt_periods:
  442.  dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  443.  dc.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  444.  dc.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  445.  dc.w $007f,$0078,$0071,$0000,$0000
  446.  
  447. mt_speed:    dc.b    $6
  448. mt_songpos:    dc.b    $0
  449. mt_pattpos:    dc.w    $0
  450. mt_counter:    dc.b    $0
  451.  
  452. mt_break:    dc.b    $0
  453. mt_dmacon:    dc.w    $0
  454. mt_samplestarts:dcb.l    $1f,0
  455. mt_voice1:    dcb.w    10,0
  456.         dc.w    $1
  457.         dcb.w    3,0
  458. mt_voice2:    dcb.w    10,0
  459.         dc.w    $2
  460.         dcb.w    3,0
  461. mt_voice3:    dcb.w    10,0
  462.         dc.w    $4
  463.         dcb.w    3,0
  464. mt_voice4:    dcb.w    10,0
  465.         dc.w    $8
  466.         dcb.w    3,0
  467.  
  468.  
  469. mt_data incbin "df2:Modules/mod.parallax"
  470.  
  471.  
  472.